﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Texfina.Entity.Co;
using System.Collections;
using System.Text;
using Texfina.Core.Common;

namespace wfCompras
{
    public partial class wfOrdenCompras : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["sesLstCargaProductoBuscador"] != null)
            {
                if (hdProducto.Value == "1")
                {
                    List<EDetProducto> lstProducto = (List<EDetProducto>)Session["sesLstCargaProductoBuscador"];
                    EDetProducto oProducto = new EDetProducto();
                    for (int i = 0; lstProducto.Count > i; i++)
                    {
                        oProducto._Codigo = lstProducto[i]._Codigo;
                        oProducto._Pres = lstProducto[i]._Pres;
                        oProducto._Producto = lstProducto[i]._Producto;
                    }

                    int cantRows = GVDetalleProducto.Rows.Count;
                    int indexRows = Convert.ToInt32(Session["indexRowCommad"]);

                    //List<EProducto> lstOrdenCompra=(List<EProducto>)Session["SeslstSalvaDatos"];
                    //EProducto oProd= new EProducto();
                    
                    //for (int i=0; lstOrdenCompra.Count> i; i++)
                    //{
                    //    oProd.Id_producto=lstOrdenCompra[i].Id_producto;
                    //}

                    for(int x = 0; lstProducto.Count > x; x++)
                    {
                        if (((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIdproducto")).Text == oProducto._Codigo &&
                          ((TextBox)GVDetalleProducto.Rows[x].FindControl("txtIdPres")).Text == oProducto._Pres)
                        {
                            lblDCPDMensaje.Text = "El defecto seleccionado ya ha sido ingresado";
                            lblDCPDMensaje.Visible = true;
                            return;
                        }
                    }

                    ((TextBox)GVDetalleProducto.Rows[indexRows].FindControl("txtIdproducto")).Text = oProducto._Codigo;
                    ((TextBox)GVDetalleProducto.Rows[indexRows].FindControl("txtIdPres")).Text = oProducto._Pres;
                    Session["sesLstCargaProductoBuscador"] = null;


                }
            }
        }


        private void mSalvarDatosGrilla()
        {
            try
            {
                //recorre la cantidad de items, por cada item la entidad oAsigHorario va almacenando , 
                //esto para que data que se va ingresando en la grilla no se pierda

                List<EDetProducto> lstSalvarDatos = new List<EDetProducto>();

                for (int i = 0; GVDetalleProducto.Rows.Count > i; i++)
                {
                    // la entidad almacena los items de la grilla 

                    EDetProducto oDetProducto = new EDetProducto();

                    // verificar si los valores ingresados en la grilla estan en label o texbox como tambien en un dropdowlinst

                    oDetProducto._Codigo = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdproducto")).Text);

                    oDetProducto._Pres = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdPres")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIdPres")).Text);

                    oDetProducto._Producto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDsProducto")).Text);
                    oDetProducto._Presenta = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPresentacion")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPresentacion")).Text);
                    oDetProducto._UM = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtUM")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtUM")).Text);
                    oDetProducto._Peso_Bruto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPesoBruto")).Text);

                    oDetProducto._Lote = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtLote")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtLote")).Text);

                    oDetProducto._fe_venc = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtFecVencimiento")).Text;
                    oDetProducto._fe_Entrega = ((TextBox)GVDetalleProducto.Rows[i].FindControl("txtFecEngrega")).Text;

                    oDetProducto._OP = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtOp")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtOp")).Text);
                    oDetProducto._Cant = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCantidad")).Text);
                    oDetProducto._PreNeto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPneto")).Text);
                    oDetProducto._PreUnit = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtPU")).Text);
                    oDetProducto._C_Gasto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCGasto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtCGasto")).Text);
                    oDetProducto._Tipgasto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtTipoGasto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtTipoGasto")).Text);
                    oDetProducto._Dscto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtDscto")).Text);
                    oDetProducto._Igv = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtIGV")).Text);
                    oDetProducto._subTotal = string.IsNullOrEmpty(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto.Rows[i].FindControl("txtSubTotal")).Text);
                    //añade los valores de la entidad a la lista de la entidad

                    lstSalvarDatos.Add(oDetProducto);

                }
                // se crea una sesion para almacenar la lista que contiene los  datos.

                Session["SeslstSalvaDatos"] = lstSalvarDatos;
            }

            catch (Exception ex)
            {

                ex.ToString();
            }
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                // crea la entidad tipo lista 
                //List<AsignacionHorarioEnt> lstAsigHorario = new List<AsignacionHorarioEnt>();
                // crea la entidad para obtener los campos que deseamos esten en blanco

                //AsignacionHorarioEnt asigHorario = new AsignacionHorarioEnt();

                List<EDetProducto> lstProd = new List<EDetProducto>();

                EDetProducto prod = new EDetProducto();

                // llega a ingresar siempre en cuando ya se tenga un registro en la grilla

                if (GVDetalleProducto.Rows.Count > 0)
                {
                    //almacena en la entidad la informacion ingresada en la grilla
                    //salva los datos, hace que cuando se de agregar no se pierda la informacion ya ingresada

                    mSalvarDatosGrilla();
                    lstProd = (List<EDetProducto>)(Session["SeslstSalvaDatos"]);

                    //lstAsigHorario = (List<AsignacionHorarioEnt>)(Session["SeslstSalvaDatos"]);
                    //añade un registro mas en blaco

                    prod._Codigo = "";
                    prod._Pres = "";
                    prod._Producto = "";
                    prod._Presenta = "";

                    prod._UM = "";
                    prod._Peso_Bruto = Convert.ToDecimal("0.000");
                    prod._Lote = "";
                    DateTime fecha_venc = DateTime.Today;
                    DateTime fecha_Entrega = DateTime.Today;
                    prod._fe_venc = fecha_venc.ToString();
                    prod._fe_Entrega = fecha_Entrega.ToString();
                    prod._OP = "";
                    prod._Cant = Convert.ToDecimal("0.000");
                    prod._PreNeto = Convert.ToDecimal("0.000");
                    prod._PreUnit = Convert.ToDecimal("0.000");
                    prod._C_Gasto = "";
                    prod._Tipgasto = "";
                    prod._Dscto = Convert.ToDecimal("0.000");
                    prod._Igv = Convert.ToDecimal("0.000");
                    prod._subTotal = Convert.ToDecimal("0.000");

                    // muestra el item en blanco

                    lstProd.Add(prod);
                    GVDetalleProducto.DataSource = lstProd;
                    GVDetalleProducto.DataBind();
                    Session["lstListadoGrilla"] = lstProd;


                }
                else
                {
                    // Añande el primer item en blando de la grilla

                    prod._Codigo = "";
                    prod._Pres = "";
                    prod._Producto = "";
                    prod._Presenta = "";

                    prod._UM = "";
                    prod._Peso_Bruto = Convert.ToDecimal("0.000");


                    prod._Lote = "";

                    DateTime fecha_venc = DateTime.Today;
                    DateTime fecha_Entrega = DateTime.Today;

                    prod._fe_venc = fecha_venc.ToString();
                    prod._fe_Entrega = fecha_Entrega.ToString();
                    prod._OP = "";
                    prod._Cant = Convert.ToDecimal("0.000");
                    prod._PreNeto = Convert.ToDecimal("0.000");
                    prod._PreUnit = Convert.ToDecimal("0.000");
                    prod._C_Gasto = "";
                    prod._Tipgasto = "";
                    prod._Dscto = Convert.ToDecimal("0.000");
                    prod._Igv = Convert.ToDecimal("0.000");
                    prod._subTotal = Convert.ToDecimal("0.000");


                    lstProd.Add(prod);

                    //Muestra la grilla con un fila en blanco 

                    GVDetalleProducto.DataSource = lstProd;

                    GVDetalleProducto.DataBind();

                    Session["lstListadoGrilla"] = lstProd;
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }
        }
        private void mSalvarDatosGrillaDetalle()
        {
            try
            {
                List<EDetProducto> lstSalvaDatos = new List<EDetProducto>();
                for (int i = 0; GVDetalleProducto0.Rows.Count > i; i++)
                {
                    EDetProducto oSalva = new EDetProducto();
                    oSalva._Codigo = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtIdproducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtIdproducto")).Text);
                    oSalva._Pres = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtIdPres")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtIdPres")).Text);
                    oSalva._Producto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtDsProducto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtDsProducto")).Text);
                    oSalva._Presenta = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPresentacion")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPresentacion")).Text);
                    oSalva._UM = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtUM")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtUM")).Text);
                    oSalva._Peso_Bruto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPesoBruto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPesoBruto")).Text);
                    oSalva._Lote = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtLote")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtLote")).Text);
                    oSalva._fe_venc = ((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtFecVencimiento")).Text;
                    oSalva._fe_Entrega = ((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtFecEngrega")).Text;
                    oSalva._OP = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtOp")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtOp")).Text);
                    oSalva._Cant = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtCantidad")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtCantidad")).Text);
                    oSalva._PreNeto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPneto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPneto")).Text);
                    oSalva._PreUnit = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPU")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtPU")).Text);
                    oSalva._C_Gasto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtCGasto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtCGasto")).Text);
                    oSalva._Tipgasto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtTipoGasto")).Text) ? string.Empty : Convert.ToString(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtTipoGasto")).Text);
                    oSalva._Dscto = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtDscto")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtDscto")).Text);
                    oSalva._Igv = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtIGV")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtIGV")).Text);
                    oSalva._subTotal = string.IsNullOrEmpty(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtSubTotal")).Text) ? 0 : Convert.ToDecimal(((TextBox)GVDetalleProducto0.Rows[i].FindControl("txtSubTotal")).Text);
                    lstSalvaDatos.Add(oSalva);
                }
                Session["SeslstSalvaDatos"] = lstSalvaDatos;
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }
        protected void grdBttCmdEdit_Click(object sender, ImageClickEventArgs e)
        {
            //PupCargaColor.aspx
            string strCodigProducto = string.IsNullOrEmpty(hidId.Value) ? string.Empty : hidId.Value;
            Hashtable htaDatos = new Hashtable();
            htaDatos.Add("in_codigo_producto", strCodigProducto);
            Session["htaParadaDetNuevo"] = htaDatos;
            mSalvarDatosGrillaDetalle();
    
            //Session[Constants.ConstSessionVar.SESION_PRODUCTO] = "_SESION_PRODUCTO";

            ScriptManager.RegisterStartupScript(this, typeof(string), "OPEN_WINDOW", "var Mleft = (screen.width/2)-(760/2);var Mtop = (screen.height/2)-(700/2);window.open('wfProductoBnd.aspx', null, 'height=400,width=700,status=yes,toolbar=no,scrollbars=yes,menubar=no,location=no,top=\'+Mtop+\', left=\'+Mleft+\'' );", true);


          
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                // crea la entidad tipo lista 
                //List<AsignacionHorarioEnt> lstAsigHorario = new List<AsignacionHorarioEnt>();
                // crea la entidad para obtener los campos que deseamos esten en blanco

                //AsignacionHorarioEnt asigHorario = new AsignacionHorarioEnt();

                List<EDetProducto> lstProd = new List<EDetProducto>();

                EDetProducto prod = new EDetProducto();

                // llega a ingresar siempre en cuando ya se tenga un registro en la grilla
                string str = Convert.ToString(GVDetalleProducto0.Rows.Count + 1);
                if (GVDetalleProducto0.Rows.Count > 0)
                {
                    //almacena en la entidad la informacion ingresada en la grilla
                    //salva los datos, hace que cuando se de agregar no se pierda la informacion ya ingresada

                    mSalvarDatosGrillaDetalle();

                    lstProd = (List<EDetProducto>)(Session["SeslstSalvaDatos"]);

                    //lstAsigHorario = (List<AsignacionHorarioEnt>)(Session["SeslstSalvaDatos"]);
                    //añade un registro mas en blaco

                    prod._Codigo = "";
                    prod._Pres = "";
                    prod._Producto = "";
                    prod._Presenta = "";
                    prod._Nu_Correla = str.PadLeft(3, '0');
                    prod._UM = "";
                    prod._Peso_Bruto = Convert.ToDecimal("0.000");
                    prod._Lote = "";
                    DateTime fecha_venc = DateTime.Today;
                    DateTime fecha_Entrega = DateTime.Today;
                    prod._fe_venc = fecha_venc.ToString();
                    prod._fe_Entrega = fecha_Entrega.ToString();
                    prod._OP = "";
                    prod._Cant = Convert.ToDecimal("0.000");
                    prod._PreNeto = Convert.ToDecimal("0.000");
                    prod._PreUnit = Convert.ToDecimal("0.000");
                    prod._C_Gasto = "";
                    prod._idCosto = "";
                    prod._C_Costos = "";
                    prod._Tipgasto = "";
                    prod._id_tipgstimp = "";
                    prod._nu_pordscto = Convert.ToDecimal("0.000");
                    prod._Dscto = Convert.ToDecimal("0.000");
                    prod._Igv = Convert.ToDecimal("0.000");
                    prod._subTotal = Convert.ToDecimal("0.000");

                    // muestra el item en blanco

                    lstProd.Add(prod);
                    GVDetalleProducto0.DataSource = lstProd;
                    GVDetalleProducto0.DataBind();
                    Session["lstListadoGrilla"] = lstProd;
                    //mCalculaTotal();
                }
                else
                {
                    // Añande el primer item en blando de la grilla
                    prod._Nu_Correla = str.PadLeft(3, '0');
                    prod._Codigo = "";
                    prod._Pres = "";
                    prod._Producto = "";
                    prod._Presenta = "";
                    prod._UM = "";
                    prod._Peso_Bruto = Convert.ToDecimal("0.000");
                    prod._Lote = "";

                    //DateTime fecha_venc = DateTime.Today;
                    //DateTime fecha_Entrega = DateTime.Today;

                    //prod._fe_venc = fecha_venc.ToString();
                    //prod._fe_Entrega = fecha_Entrega.ToString();
                    prod._fe_venc = "";
                    prod._fe_Entrega = "";
                    prod._OP = "";
                    prod._Cant = Convert.ToDecimal("0.000");
                    prod._PreNeto = Convert.ToDecimal("0.000");
                    prod._PreUnit = Convert.ToDecimal("0.000");
                    prod._nu_pordscto = Convert.ToDecimal("0.000");
                    prod._C_Gasto = "";
                    prod._idCosto = "";
                    prod._C_Costos = "";
                    prod._Tipgasto = "";
                    prod._id_tipgstimp = "";
                    prod._Dscto = Convert.ToDecimal("0.000");
                    prod._Igv = Convert.ToDecimal("0.000");
                    prod._subTotal = Convert.ToDecimal("0.000");
                    lstProd.Add(prod);
                    //Muestra la grilla con un fila en blanco 
                    GVDetalleProducto0.DataSource = lstProd;
                    GVDetalleProducto0.DataBind();
                    Session["lstListadoGrilla"] = lstProd;
                    //mCalculaTotal();
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }

        }
    }
}